home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 1 / ETO Development Tools 1.iso / Essentials / Developer Essentials Jul 90 / Apple II / Programming & Utilities / Apple IIgs APW Intro Prog Src / HP.PAS / HP.PAS.txt < prev    next >
Encoding:
Text File  |  1987-09-14  |  14.0 KB  |  309 lines

  1. program HodgePodge;
  2.  
  3. {+----------------------------------------------------------------------------+
  4.  |                                                                            |
  5.  |         HodgePodge:  An example Apple IIGS Desktop application             |
  6.  |                                                                            |
  7.  |    Written in 65816 assembler and APW C by the Apple IIGS Tools Team       |
  8.  |              Translated to TML Pascal by TML Systems, Inc.                 |
  9.  |  Modified by Ben Koning for "Programmer's Introduction to the Apple IIGS"  |
  10.  |                                                                            |
  11.  |             Copyright (c) 1986-87 by Apple Computer, Inc.                  |
  12.  |                Copyright (c) 1987 by TML Systems, Inc.                     |
  13.  |                                                                            |
  14.  |   ----------------------------------------------------------------------   |
  15.  |                                                                            |
  16.  |           This program and its derivatives are licensed only for           |
  17.  |           use on Apple computers.                                          |
  18.  |                                                                            |
  19.  |           Works based on this program must contain and                     |
  20.  |           conspicuously display this notice.                               |
  21.  |                                                                            |
  22.  |           This software is provided for your evaluation and to             |
  23.  |           assist you in developing software for the Apple IIGS             |
  24.  |           computer.                                                        |
  25.  |                                                                            |
  26.  |           This is not a distribution license. Distribution of              |
  27.  |           this and other Apple software requires a separate                |
  28.  |           license. Contact the Software Licensing Department of            |
  29.  |           Apple Computer, Inc. for details.                                |
  30.  |                                                                            |
  31.  |           DISCLAIMER OF WARRANTY                                           |
  32.  |                                                                            |
  33.  |           THE SOFTWARE IS PROVIDED "AS IS" WITHOUT                         |
  34.  |           WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,                 |
  35.  |           WITH RESPECT TO ITS MERCHANTABILITY OR ITS FITNESS               |
  36.  |           FOR ANY PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO               |
  37.  |           THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH              |
  38.  |           YOU.  SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU (AND              |
  39.  |           NOT APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE)                 |
  40.  |           ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING,               |
  41.  |           REPAIR OR CORRECTION.                                            |
  42.  |                                                                            |
  43.  |           Apple does not warrant that the functions                        |
  44.  |           contained in the Software will meet your requirements            |
  45.  |           or that the operation of the Software will be                    |
  46.  |           uninterrupted or error free or that defects in the               |
  47.  |           Software will be corrected.                                      |
  48.  |                                                                            |
  49.  |           SOME STATES DO NOT ALLOW THE EXCLUSION                           |
  50.  |           OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY                |
  51.  |           NOT APPLY TO YOU.  THIS WARRANTY GIVES YOU SPECIFIC              |
  52.  |           LEGAL RIGHTS AND YOU MAY ALSO HAVE OTHER RIGHTS                  |
  53.  |           WHICH VARY FROM STATE TO STATE.                                  |
  54.  |                                                                            |
  55.  |   ----------------------------------------------------------------------   |
  56.  |                                                                            |
  57.  |    Pascal UNIT "HP.PAS" : Main routine and tool init/shutdown routines     |
  58.  |                                                                            |
  59.  +----------------------------------------------------------------------------+}
  60.  
  61.  
  62.  
  63. USES
  64.        HPIntfData,         {HodgePodge Apple IIGS Toolbox Interface Units}
  65.        HPIntfProc,
  66.        HPIntfPdos,
  67.  
  68.        Globals,            {HodgePodge Code Units}
  69.        Dialog,
  70.        Font,
  71.        Paint,
  72.        Window,
  73.        Print,
  74.        Menu,
  75.        Event;
  76.  
  77.  
  78.  
  79. function StartUpTools : boolean;
  80.  
  81.    {Routine to start up the Apple IIGS toolbox.  We attempt to start up all
  82.     the managers that we need, checking each time if an error occurred during
  83.     startup.  True/false is returned by this routine depending on its success.
  84.     If the RAM-based tools cannot be loaded, the user is prompted to install
  85.     a system disk and is given the option of trying again or exitting.  The
  86.     latter option exits this procedure with a False result.  Tool startup
  87.     errors result in a call to the system death handler (the bouncing apple),
  88.     with a code showing where we died as well as the actual tool error number.}
  89.  
  90.    var ToolRec    : ToolTable;
  91.        ParamBlock : FileRec;
  92.  
  93.    label 1;  {Just for once, let's commit the cardinal sin of using the GOTO!}
  94.  
  95.    begin   {of StartUpTools}
  96.  
  97.        StartUpTools := true;               {Assume all is well at first}
  98.  
  99.        TLStartUp;                                  {Init Tool Locator  }
  100.        CheckToolError (1);
  101.  
  102.        MyMemoryID := MMStartUp;                    {Init Memory Manager}
  103.        MTStartUp;                                  {Init Misc Tools    }
  104.        CheckToolError (2);
  105.  
  106.        {Allocate 10 pages of memory in bank 0 for use by GS Tools:
  107.            3 pages for QuickDraw, 
  108.            1 page for Event Manager, 
  109.            1 page for Control Manager,
  110.            1 page for Line Edit,
  111.            1 page for Menu Manager,
  112.            1 page for Standard File,
  113.            1 page for Print Manager,
  114.            1 page for Font Manager}
  115.  
  116.        ToolsZeroPage := 
  117.            NewHandle (10 * 256,                        {Allocate 10 pages}
  118.                       MyMemoryID,                      {Process (user) ID}
  119.                       attrBank+attrFixed+attrLocked+attrPage, {Attributes}
  120.                       Ptr (0));                        {Start in bank 0  }
  121.        CheckToolError (3);
  122.  
  123.        QDStartUp
  124.            (LoWord (ToolsZeroPage^),                   {Address of zpag # 3 }
  125.             ScreenMode,                                {640 mode            }
  126.             MaxScan,                                   {Horizontal line size}
  127.             MyMemoryID);                               {Process (user) ID   }
  128.        CheckToolError (4);
  129.  
  130.        EMStartUp
  131.            (LoWord (ToolsZeroPage^) + $300,            {Address of zpag # 4 }
  132.             20,                                        {Event queue size    }
  133.             0,                                         {X min clamp         }
  134.             MaxX,                                      {X max clamp         }
  135.             0,                                         {Y min clamp         }
  136.             200,                                       {Y max clamp         }
  137.             MyMemoryID);                               {Process (user) ID   }
  138.        CheckToolError (5);
  139.  
  140.        {Give a message while we load RAM based tools:}
  141.        MoveTo          (20,20);
  142.        SetBackColor    (0);
  143.        SetForeColor    (15);
  144.        DrawString      ('One Moment Please...');
  145.  
  146.        ShowCursor;
  147.    
  148.        {Now load RAM based tools (and RAM patches to ROM tools!):}
  149.        ToolRec.NumTools := 14;
  150.        ToolRec.Tools[1].TSNum := 4;                {QuickDraw II   }
  151.        ToolRec.Tools[1].MinVersion := 0;
  152.        ToolRec.Tools[2].TSNum := 5;                {Desk Manager   }
  153.        ToolRec.Tools[2].MinVersion := 0;
  154.        ToolRec.Tools[3].TSNum := 6;                {Event Manager  }
  155.        ToolRec.Tools[3].MinVersion := 0;
  156.        ToolRec.Tools[4].TSNum := 14;               {Window Manager }
  157.        ToolRec.Tools[4].MinVersion := 0;
  158.        ToolRec.Tools[5].TSNum := 15;               {Menu Manager   }
  159.        ToolRec.Tools[5].MinVersion := 0;
  160.        ToolRec.Tools[6].TSNum := 16;               {Control Manager}
  161.        ToolRec.Tools[6].MinVersion := 0;
  162.        ToolRec.Tools[7].TSNum := 18;               {QuickDraw Aux  }
  163.        ToolRec.Tools[7].MinVersion := 0;
  164.        ToolRec.Tools[8].TSNum := 19;               {Print Manager  }
  165.        ToolRec.Tools[8].MinVersion := 0;
  166.        ToolRec.Tools[9].TSNum := 20;               {Line Edit      }
  167.        ToolRec.Tools[9].MinVersion := 0;
  168.        ToolRec.Tools[10].TSNum := 21;              {Dialog Manager }
  169.        ToolRec.Tools[10].MinVersion := 0;
  170.        ToolRec.Tools[11].TSNum := 22;              {Scrap Manager  }
  171.        ToolRec.Tools[11].MinVersion := 0;
  172.        ToolRec.Tools[12].TSNum := 23;              {Standard File  }
  173.        ToolRec.Tools[12].MinVersion := 0;
  174.        ToolRec.Tools[13].TSNum := 27;              {Font Manager   }
  175.        ToolRec.Tools[13].MinVersion := 0;
  176.        ToolRec.Tools[14].TSNum := 28;              {List Manager   }
  177.        ToolRec.Tools[14].MinVersion := 0;
  178.  
  179.    1:
  180.        ParamBlock.pathname := @'*/SYSTEM/TOOLS';      {Make sure tools avail}
  181.        GET_FILE_INFO (ParamBlock);
  182.        if toolErr <> 0 then
  183.            if MountBootDisk = 1 then
  184.                goto 1
  185.            else begin
  186.                StartUpTools := false;
  187.                Exit;
  188.            end;
  189.  
  190.        LoadTools      (ToolRec);                       {Load the tools I need}
  191.        CheckToolError (6);
  192.  
  193.        WindStartUp    (MyMemoryID);                    {Init Window Manager }
  194.        CheckToolError (7);
  195.  
  196.        RefreshDesktop (nil);                           {Draw the desktop    }
  197.    
  198.        CtlStartUp                                      {Init Control Manager}
  199.            (MyMemoryID,                                {Process (user) ID   }
  200.             LoWord (ToolsZeroPage^) + $400);           {Address of zpag # 5 }
  201.        CheckToolError (8);
  202.  
  203.        LEStartUp                                       {Init Line Edit      }
  204.            (LoWord (ToolsZeroPage^) + $500,            {Address of zpag # 6 }
  205.             MyMemoryID);                               {Process (user) ID   }
  206.        CheckToolError (9);
  207.  
  208.        DialogStartUp                                   {Init Dialog Manager }
  209.            (MyMemoryID);                               {Process (user) ID   }
  210.        CheckToolError (10);
  211.  
  212.        MenuStartUp                                     {Init Menu Manager   }
  213.            (MyMemoryID,                                {Process (user) ID   }
  214.             LoWord (ToolsZeroPage^) + $600);           {Address of zpag # 7 }
  215.        CheckToolError (11);
  216.  
  217.        DeskStartUp;                                    {Init Desk Manager   }
  218.        CheckToolError (12);
  219.  
  220.        ShowPleaseWait;                                 {Put up dialog box   }
  221.  
  222.        SFStartUp                                       {Init Standard File  }
  223.            (MyMemoryID,                                {Process (user) ID   }
  224.             LoWord (ToolsZeroPage^) + $700);           {Address of zpag # 8 }
  225.        CheckToolError (13);
  226.        SFAllCaps (true);                       {I want filenames in all caps}
  227.  
  228.        QDAuxStartUp;                                   {Init QuickDraw Auxil}
  229.        CheckToolError (14);
  230.        WaitCursor;                                     {Wristwatch cursor   }
  231.  
  232.        FMStartUp                                       {Init Font Manager   }
  233.            (MyMemoryID,                                {Process (user) ID   }
  234.             LoWord (ToolsZeroPage^) + $800);           {Address of zpag # 9 }
  235.        CheckToolError (15);
  236.  
  237.        ListStartUp;                                    {Init List Manager   }
  238.        CheckToolError (16);
  239.  
  240.        PMStartUp                                       {Init Print Manager  }
  241.            (MyMemoryID,                                {Process (user) ID   }
  242.             LoWord (ToolsZeroPage^) + $900);           {Address of zpag # 10}
  243.        CheckToolError (17);
  244.  
  245.        ScrapStartUp;                                   {Init Scrap Manager  }
  246.        CheckToolError (18);
  247.  
  248.        HidePleaseWait;                                 {Remove dialog box   }
  249.        InitCursor;                                     {Normal arrow cursor }
  250.  
  251.    end;    {of StartUpTools}
  252.  
  253.  
  254.  
  255. procedure ShutDownTools;
  256.  
  257.    {Routine to shut down all the tools we used in reverse order of startup.
  258.     Only tools which are currently active are shut down; this facilitates
  259.     recovery from an error condition from StartUpTools.}
  260.  
  261.    begin   {of ShutDownTools}
  262.  
  263.        {Put GrafOff call here if you don't want to see the windows close}
  264.        DeskShutDown;
  265.        if WindStatus <> 0 then
  266.            HideAllWindows;     {Close all windows only if OK!  Takes some time.}
  267.        ListShutDown;
  268.        FMShutDown;
  269.        ScrapShutDown;
  270.        PMShutDown;
  271.        QDAuxShutDown;
  272.        SFShutDown;
  273.        MenuShutDown;
  274.        DialogShutDown;
  275.        LEShutDown;
  276.        CtlShutDown;
  277.        WindShutDown;
  278.        EMShutDown;
  279.        if QDStatus <> 0 then
  280.            GrafOff;            {Back to text mode only if OK!}
  281.        QDShutDown;
  282.        MTShutDown;
  283.        if MMStatus <> 0 then begin
  284.            DisposeHandle (ToolsZeroPage);  {Deallocate tool directpage space}
  285.            MMShutDown    (MyMemoryID);     {Do this only if OK!}
  286.        end;
  287.        TLShutDown;
  288.  
  289.    end;    {of ShutDownTools}
  290.  
  291.  
  292.  
  293.  
  294.  
  295. BEGIN  {of MAIN program HodgePodge}
  296.  
  297.    InitGlobals;            { Initialze our globals, menus, etc. }
  298.  
  299.    if StartUpTools then begin      { Initialize IIGS Tools }
  300.        SetUpDefault;               { Set up print dialog }
  301.        SetUpMenus;                 { Set up menus }
  302.        SetUpWindows;               { Set up windows }
  303.        MainEvent;                  { Use application }
  304.    end;
  305.  
  306.    ShutDownTools;          { Shut down IIGS Tools }
  307.  
  308. END.   {of MAIN program HodgePodge}
  309.